﻿using PerpheralDevice;
using PerpheralDevice.IRepository;
using Microsoft.EntityFrameworkCore.Infrastructure.Internal;
using System.Serialization;

namespace AppMachine.EntityFrameworkCore.Repositories.PerpDev;

/// <summary>
/// 外部设备配置仓储
/// </summary>
public class PerpDevConfigRepository : IPerpDevConfigRepository {
    private readonly AppDbContext _AppComDbContext = new AppDbContextFactory().CreateDbContext(null);

    public IPerpDevConfig Query(string perpDevID) {
        return _AppComDbContext.PerpDevConfigList.FirstOrDefault(it => it.DevID == perpDevID);
    }

    public void Delete(IPerpDevConfig perpDevConfig) {
        throw new NotImplementedException();
    }

    public IPerpDevConfig InsertOrUpdate(IPerpDevConfig perpDevConfig) {
        if (Query(perpDevConfig.DevID) is not PerpDevConfig tempPerpDevConfig) {
            tempPerpDevConfig = new PerpDevConfig();
            if (tempPerpDevConfig.Aceept(perpDevConfig)) {
                _AppComDbContext.Add(tempPerpDevConfig);
                _AppComDbContext.SaveChanges();
            }
        } else {
            if (tempPerpDevConfig.Aceept(perpDevConfig)) {
                _AppComDbContext.Update(tempPerpDevConfig);
                _AppComDbContext.SaveChanges();
            }
        }

        return tempPerpDevConfig;
    }

    public IQueryable<IPerpDevConfig> GetAll() {
        return _AppComDbContext.PerpDevConfigList.Where(it => !string.IsNullOrEmpty(it.DevID));
    }
}
